from rest_framework.viewsets import ReadOnlyModelViewSet
from rest_framework_extensions.cache.decorators import cache_response

from .models import AreaInfo
from .serializers import AreaSerializer, AreaSubSerializer
from rest_framework_extensions.cache.mixins import CacheResponseMixin
from rest_framework.views import APIView
from rest_framework.response import Response


class AreaViewSet(CacheResponseMixin, ReadOnlyModelViewSet):
    # 属性action，与方法同名，用于进行判断
    # list()========>查询多个，用于查询所有省
    # retrieve()====>查询一个
    # 查询集
    # queryset = AreaInfo.objects.all()
    def get_queryset(self):
        if self.action == "list":
            # 查询多个的逻辑为：查询所有省信息
            return AreaInfo.objects.filter(parent__isnull=True)
        else:
            # 查询一个地区时，使用所有数据作为查询集，在此基本上会根据pk查询某一个对象
            return AreaInfo.objects.all()

    # 序列化器类型
    # serializer_class =
    # 当前查询所有省使用AreaSerializer
    # 查询一个地区时使用AreaSubSerializer
    # 此处需要进行判断返回不同的序列化器类型，需要编写一段代码
    # 将此代码写到如下方法中
    def get_serializer_class(self):
        if self.action == 'list':
            # 查询多个，当前为查询所有省
            return AreaSerializer
        elif self.action == 'retrieve':
            # 查询一个，当前为查询某个地区
            return AreaSubSerializer


class AreaView(APIView):
    @cache_response()
    def get(self, request, pk):
        return Response(pk)
